Module 4: Factorial Treatment Structure

Example: Interaction Present, interpret Simple Effects

Example 4.3: Asphalt

A civil engineer conducted an experiment to evaluate differences among a set of compaction methods for their effect on the tensile strength of test specimens and to determine to what extent the aggregate type affected the comparisons among the compaction methods. Twenty-four specimens of the asphalt concrete were constructed, and the eight treatment combinations were randomly assigned to the specimens.

Example 6.2 from Design of Experiments: Statistical Principles of Research Design and Analysis, 2nd Edition by Robert O. Kuehl.

Example 4.3: Asphalt

Factors: + Aggregate Type: Basalt, Silicous + Compaction Method: Static, Regular kneading, Low kneading, Very low kneading

Design: CRD with \(r=3\) specimens per treatment combination (N = 24)

Response: Tensile strength

asphalt_data <- read_csv("data/04_asphalt_data.csv") |>
  mutate(aggregate  = factor(aggregate),
         compaction = factor(compaction))
head(asphalt_data)
# A tibble: 6 × 3
  aggregate compaction strength
  <fct>     <fct>         <dbl>
1 basalt    static           68
2 basalt    static           63
3 basalt    static           65
4 basalt    regular         126
5 basalt    regular         128
6 basalt    regular         133
levels(asphalt_data$aggregate)
[1] "basalt"   "siliciou"
levels(asphalt_data$compaction)
[1] "low"     "regular" "static"  "verylow"

Example 4.3: Statistical Effects Model

\[y_{ijk}=\mu+\alpha_i+\beta_j+\alpha\beta_{ij}+\epsilon_{ijk} \text{ with } \epsilon_{ijk} \sim \text{ iid }N(0,\sigma^2)\]

\[\text{for } i=1,2; j=1,2,3,4; k=1,2,3\]

  • \(y_{ijk}\): is the observed tensile strength for the \(k^{th}\)s specimen receiving the \(i^{th}\) Aggregate and \(j^{th}\) Compaction
  • \(\mu\): is the overall mean tensile strength
  • \(\alpha_i\): is the effect of the \(i^{th}\) level of Aggregate
  • \(\beta_j\): is the effect of the \(j^{th}\) level of Compaction
  • \(\alpha\beta_{ij}\): is the interaction effect between the \(i^{th}\) level of Aggregate and \(j^{th}\) level of Compaction
  • \(\epsilon_{ijk}\): the experimental error associated with the \(k^{th}\) specimen receiving the \(i^{th}\) Aggregate and \(j^{th}\) Compaction

Decision Flowchart

ANOVA

options(contrasts = c("contr.sum", "contr.poly"))
asphalt_mod <- lm(strength ~ aggregate*compaction, data = asphalt_data)
anova(asphalt_mod)
Analysis of Variance Table

Response: strength
                     Df Sum Sq Mean Sq F value    Pr(>F)    
aggregate             1   1734  1734.0 182.526 3.628e-10 ***
compaction            3  16244  5414.5 569.947 < 2.2e-16 ***
aggregate:compaction  3   1145   381.7  40.175 1.124e-07 ***
Residuals            16    152     9.5                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

We have evidence to conclude there is a significant interaction between aggregate and compaction on tensile strength (F = 1145; df = 3,16; p < 0.0001).

The effect of aggregate on tensile strength varies across different levels of compaction.

Where should we proceed?

  1. Interaction: We have evidence to conclude there is a significant interaction between aggregate and compaction on tensile strength (F = 1145; df = 3,16; p < 0.0001).
  2. Aggregate Main: don’t care.. misleading.
  3. Compaction Main: don’t care.. misleading.

How does the mean tensile strength for aggregates change depending on the compaction method?

What combination of aggregate and compaction lead to higher tensile strengths?

R: Interaction Plots

library(emmeans)
emmip(asphalt_mod, aggregate ~ compaction, CIs = TRUE, adjust = "tukey")

emmip(asphalt_mod, compaction ~ aggregate, CIs = TRUE, adjust = "tukey")

JMP: Interaction Plots

Joint Pairwise Comparisons: Aggregate x Compaction

library(multcomp)
axc_lsmeans <- emmeans(asphalt_mod, specs = ~ aggregate*compaction)
cld(axc_lsmeans, Letters = LETTERS, decreasing = T, adjust = "tukey")
 aggregate compaction emmean   SE df lower.CL upper.CL .group 
 basalt    regular     129.0 1.78 16    123.4    134.6  A     
 siliciou  regular     111.0 1.78 16    105.4    116.6   B    
 basalt    low          97.3 1.78 16     91.8    102.9    C   
 siliciou  static       67.7 1.78 16     62.1     73.2     D  
 basalt    static       65.3 1.78 16     59.8     70.9     DE 
 siliciou  low          60.7 1.78 16     55.1     66.2     DE 
 basalt    verylow      57.3 1.78 16     51.8     62.9      E 
 siliciou  verylow      41.7 1.78 16     36.1     47.2       F

Confidence level used: 0.95 
Conf-level adjustment: sidak method for 8 estimates 
P value adjustment: tukey method for comparing a family of 8 estimates 
significance level used: alpha = 0.05 
NOTE: If two or more means share the same grouping symbol,
      then we cannot show them to be different.
      But we also did not show them to be the same. 

Aggregate*Compaction > LSMeans Tukey HSD LSMeans Differences > Ordered Differences

R: Aggregate | Compaction

Slice Tests

joint_tests(axc_lsmeans, 
            by = "compaction")
compaction = low:
 model term df1 df2 F.ratio p.value
 aggregate    1  16 212.281 <0.0001

compaction = regular:
 model term df1 df2 F.ratio p.value
 aggregate    1  16  51.158 <0.0001

compaction = static:
 model term df1 df2 F.ratio p.value
 aggregate    1  16   0.860  0.3676

compaction = verylow:
 model term df1 df2 F.ratio p.value
 aggregate    1  16  38.754 <0.0001
emmip(asphalt_mod, 
      compaction ~ aggregate, 
      CIs = TRUE, 
      adjust = "tukey")

Simple Effects

emmeans(asphalt_mod, specs = ~ aggregate | compaction) |> 
  pairs(adjust = "tukey", infer = c(T,T))
compaction = low:
 contrast          estimate   SE df lower.CL upper.CL t.ratio p.value
 basalt - siliciou    36.67 2.52 16    31.33     42.0  14.570 <0.0001

compaction = regular:
 contrast          estimate   SE df lower.CL upper.CL t.ratio p.value
 basalt - siliciou    18.00 2.52 16    12.67     23.3   7.152 <0.0001

compaction = static:
 contrast          estimate   SE df lower.CL upper.CL t.ratio p.value
 basalt - siliciou    -2.33 2.52 16    -7.67      3.0  -0.927  0.3676

compaction = verylow:
 contrast          estimate   SE df lower.CL upper.CL t.ratio p.value
 basalt - siliciou    15.67 2.52 16    10.33     21.0   6.225 <0.0001

Confidence level used: 0.95 

R: Compaction | Aggregate

Slice Tests

joint_tests(axc_lsmeans, by = "aggregate")
aggregate = basalt:
 model term df1 df2 F.ratio p.value
 compaction   3  16 338.956 <0.0001

aggregate = siliciou:
 model term df1 df2 F.ratio p.value
 compaction   3  16 271.167 <0.0001
emmip(asphalt_mod, aggregate ~ compaction, CIs = TRUE, adjust = "tukey")

Simple Effects

emmeans(asphalt_mod, specs = ~ compaction | aggregate) |> 
  pairs(adjust = "tukey", infer = c(T,T))
aggregate = basalt:
 contrast          estimate   SE df lower.CL upper.CL t.ratio p.value
 low - regular        -31.7 2.52 16    -38.9    -24.5 -12.583 <0.0001
 low - static          32.0 2.52 16     24.8     39.2  12.716 <0.0001
 low - verylow         40.0 2.52 16     32.8     47.2  15.894 <0.0001
 regular - static      63.7 2.52 16     56.5     70.9  25.299 <0.0001
 regular - verylow     71.7 2.52 16     64.5     78.9  28.477 <0.0001
 static - verylow       8.0 2.52 16      0.8     15.2   3.179  0.0269

aggregate = siliciou:
 contrast          estimate   SE df lower.CL upper.CL t.ratio p.value
 low - regular        -50.3 2.52 16    -57.5    -43.1 -20.000 <0.0001
 low - static          -7.0 2.52 16    -14.2      0.2  -2.782  0.0582
 low - verylow         19.0 2.52 16     11.8     26.2   7.550 <0.0001
 regular - static      43.3 2.52 16     36.1     50.5  17.219 <0.0001
 regular - verylow     69.3 2.52 16     62.1     76.5  27.550 <0.0001
 static - verylow      26.0 2.52 16     18.8     33.2  10.331 <0.0001

Confidence level used: 0.95 
Conf-level adjustment: tukey method for comparing a family of 4 estimates 
P value adjustment: tukey method for comparing a family of 4 estimates 

JMP: Aggregate | Compaction

Slice Tests

Aggregate*Compaction > Test Slices

Simple Effects

Response > Multiple Comparisons

JMP: Compaction | Aggregate

Slice Tests